import Vue from 'vue'
import VueRouter from 'vue-router'
Vue.use(VueRouter)

import commonRouter from './modules/common' // 公共路由
import yygl from './modules/yygl' // 应用管理
import ywsl from './modules/ywsl' // 业务受理
import zygl from './modules/zygl' // 资源管理
import spgl from './modules/spgl' // 审批管理
import qwyw from './modules/qwyw' // 全网业务捆绑配置
import xtgl from './modules/xtgl' // 系统管理
import sjzx from './modules/sjzx' // 数据专线管理

/**
 * 路由相关属性说明
 * hidden: 当设置hidden为true时，不在侧边栏中显示
 * linkUrl：当设置为true时，导航到第三方网址
 * mete{
 *  title: xxx,    侧边栏名称
 *  icon: xxx,     侧边栏图标
 *  noCache: true  当设置为true时不缓存该路由页面
 * }
 */

// 公共路由
export const commonRoutes = [
  ...commonRouter,
  ...yygl,
  ...ywsl,
  ...zygl,
  ...spgl,
  ...qwyw,
  ...xtgl,
  ...sjzx
]

// 异步路由
export const asyncRoutes = [
  // 保持在Router Array的最后
  {
    path: '*',
    redirect: '/404',
    hidden: true
  }
]

const createRouter = () => {
  return new VueRouter({
    routes: commonRoutes,
    scrollBehavior: () => ({ y: 0 })
  })
}

const router = createRouter()

// 解决addRoute不能删除动态路由问题
export function resetRouter() {
  const newRouter = createRouter()
  router.matcher = newRouter.matcher
}

// vue-router 3.x 监听错误
const originalPush = VueRouter.prototype.push
VueRouter.prototype.push = function push(location) {
  return originalPush.call(this, location).catch(err => err)
}

export default router
